public class Encapsulation01 {
    public static void main(String[] args) {

        Person person = new Person();
        person.setName("mary");
        person.setAge(20);
        person.setSalary(30000);
        System.out.println(person.info());
        //System.out.println(person.getSalary());
        //如果我们自己使用构造器指定属性
        Person person1 = new Person("smith", 30, 50000);
        System.out.println("*********smith的信息如下**********");
        System.out.println(person1.info());
    }
}
class Person{

    public String name;//名字是公开的
    private int age;
    private double salary;

    //默认构造器
    public Person() {
    }
    //有三个属性的构造器
    public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //可以将set方法写在构造器中，这样私有的别人就无法查看
        setName(name);
        setAge(age);
        setSalary(salary);
    }

//    public Person(String name) {//构造器
//        this.name = name;
//    }
    //设置以及检查合理性
    //自己写setXxx和getXxx太慢，使用快捷键alt+insert

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if(name.length() >= 2 && name.length() <= 6){
            this.name = name;
        }else{
            System.out.println("你输入的名字有误，名字的长度在2~6个字符之间");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断，如果合理就赋值
        if(age >= 1 && age <= 120){
            this.age = age;
        }else{
            System.out.println("年龄有误，年龄必须在1~120之间，默认18");
            this.age = 18;//默认值
        }
    }

    public double getSalary() {
        //可以增加对当前对象的判断
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
    //写一个方法，返回属性的信息
    public String info(){
        return "信息为 name=" + name + " age=" + age +" salary=" + salary;
    }

}